﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Chilis.Marketing.Common;
using Chilis.Marketing.Business.Logic;
using Chilis.Marketing.Business.Entity;
using System.Globalization;
using System.Text;
using System.Data;

public partial class Opera_AprobarCampanha : System.Web.UI.Page
{
    #region ATRIBUTOS

    private Constantes.ACCION accion;
    private BLCampanha campanhaBL;

    #endregion

    #region PROPIEDADES
    #endregion

    #region METODOS

    private void ActivarControles(bool activo)
    {
        this.txtCodigo.Enabled = false;
        this.txtFechaCreacion.Enabled = false;
        this.txtNombreEstado.Enabled = false;
        this.txtDias.Enabled = false;
        this.txtPresupuesto.Enabled = false;

        this.txtNombre.Enabled = activo;
        this.txtDescripcion.Enabled = activo;
        this.txtMetaVenta.Enabled = activo;
        this.txtMetaUnidades.Enabled = activo;
        this.txtResponsable.Enabled = activo;
        this.txtCreativo.Enabled = activo;
        this.txtFechaProyIni.Enabled = activo;
        this.txtFechaProyFin.Enabled = activo;
        this.txtFechaRealIni.Enabled = activo;
        this.txtFechaRealFin.Enabled = activo;
    }

    private void CargarDatos(int idCampanha)
    {
        this.campanhaBL = new BLCampanha();
        BECampanha campanhaBE = this.campanhaBL.obtenerCampanhaPorId(idCampanha);
        if (campanhaBE != null)
        {
            this.txtCodigo.Text = campanhaBE.IdCampanha.ToString().PadLeft(5,'0');
            this.txtNombre.Text = campanhaBE.Nombre.ToString();
            this.txtDescripcion.Text = campanhaBE.Descripcion.ToString();

            this.txtPresupuesto.Text = String.Format("{0:N}", campanhaBE.Presupuesto);
            this.txtMetaUnidades.Text = campanhaBE.MetaUnidades.ToString();
            this.txtMetaVenta.Text = String.Format("{0:N}", campanhaBE.MetaVenta);
            if (campanhaBE.FechaProyectadaInicio.HasValue)
            {
                this.txtFechaProyIni.Text = campanhaBE.FechaProyectadaInicio.Value.ToString("dd/MM/yyyy");
            }
            if (campanhaBE.FechaProyectadaFin.HasValue)
            {
                this.txtFechaProyFin.Text = campanhaBE.FechaProyectadaFin.Value.ToString("dd/MM/yyyy");
            }
            if (campanhaBE.FechaRealInicio.HasValue)
            {
                this.txtFechaRealIni.Text = campanhaBE.FechaRealInicio.Value.ToString("dd/MM/yyyy");
            }
            if (campanhaBE.FechaRealFin.HasValue)
            {
                this.txtFechaRealFin.Text = campanhaBE.FechaRealFin.Value.ToString("dd/MM/yyyy");
            }
            if (campanhaBE.FechaCreacion.HasValue)
            {
                this.txtFechaCreacion.Text = campanhaBE.FechaCreacion.Value.ToString("dd/MM/yyyy");
            }

            if (campanhaBE.EstadoCampanha != Constantes.ESTADO_CAMPANHA.NINGUNO)
            {
                this.txtIdEstado.Value = campanhaBE.EstadoCampanha.ToString("D");
            }
            this.txtNombreEstado.Text = campanhaBE.NombreEstadoCampanha.ToUpper();

            if (campanhaBE.Trabajador != null)
            {
                this.txtIdResponsable.Value = campanhaBE.Trabajador.IdTrabajador.ToString();

                string nombreCompleto = campanhaBE.Trabajador.ApellidoPaterno.ToUpper();
                nombreCompleto += (campanhaBE.Trabajador.ApellidoMaterno != string.Empty ? " " + campanhaBE.Trabajador.ApellidoMaterno.ToUpper() : string.Empty);
                nombreCompleto += (campanhaBE.Trabajador.Nombres != string.Empty ? ", " + campanhaBE.Trabajador.Nombres : string.Empty);
                this.txtResponsable.Text = nombreCompleto;
            }
            if (campanhaBE.Creativo != null)
            {
                this.txtIdCreativo.Value = campanhaBE.Creativo.IdTrabajador.ToString();

                string nombreCompleto = campanhaBE.Creativo.ApellidoPaterno.ToUpper();
                nombreCompleto += (campanhaBE.Creativo.ApellidoMaterno != string.Empty ? " " + campanhaBE.Creativo.ApellidoMaterno.ToUpper() : string.Empty);
                nombreCompleto += (campanhaBE.Creativo.Nombres != string.Empty ? ", " + campanhaBE.Creativo.Nombres : string.Empty);
                this.txtCreativo.Text = nombreCompleto;
            }
        }
    }

    private BECampanha ObtenerCampanhaBE_WebForm()
    {
        BECampanha campanhaBE = new BECampanha();
        if (this.txtCodigo.Text != "")
        {
            int tempIdCampanha = Constantes.idValorNulo;
            int.TryParse(this.txtCodigo.Text, out tempIdCampanha);
            campanhaBE.IdCampanha = tempIdCampanha;
        }
        campanhaBE.Nombre = this.txtNombre.Text.Replace("'", "''");
        campanhaBE.Descripcion = this.txtDescripcion.Text.Replace("'", "''");
        if (this.txtPresupuesto.Text != string.Empty)
        {
            double tempPresupuesto = 0;
            double.TryParse(this.txtPresupuesto.Text, out tempPresupuesto);
            if (tempPresupuesto != 0)
            {
                campanhaBE.Presupuesto = tempPresupuesto;
            }
        }
        if (this.txtMetaUnidades.Text != string.Empty)
        {
            int tempMetaUnidades = 0;
            int.TryParse(this.txtMetaUnidades.Text, out tempMetaUnidades);
            if (tempMetaUnidades != 0)
            {
                campanhaBE.MetaUnidades = tempMetaUnidades;
            }
        }
        if (this.txtMetaVenta.Text != string.Empty)
        {
            double tempMetaVenta = 0;
            double.TryParse(this.txtMetaVenta.Text, out tempMetaVenta);
            if (tempMetaVenta != 0)
            {
                campanhaBE.MetaVenta = tempMetaVenta;
            }
        }
        if (this.txtFechaProyIni.Text != string.Empty)
        {
            CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
            DateTime tempFechaProyIni;
            if (DateTime.TryParse(this.txtFechaProyIni.Text, cultura, System.Globalization.DateTimeStyles.None, out tempFechaProyIni))
            {
                campanhaBE.FechaProyectadaInicio = tempFechaProyIni;
            }
        }
        if (this.txtFechaProyFin.Text != string.Empty)
        {
            CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
            DateTime tempFechaProyFin;
            if (DateTime.TryParse(this.txtFechaProyFin.Text, cultura, System.Globalization.DateTimeStyles.None, out tempFechaProyFin))
            {
                campanhaBE.FechaProyectadaFin = tempFechaProyFin;
            }
        }
        if (this.txtFechaRealIni.Text != string.Empty)
        {
            CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
            DateTime tempFechaRealIni;
            if (DateTime.TryParse(this.txtFechaRealIni.Text, cultura, System.Globalization.DateTimeStyles.None, out tempFechaRealIni))
            {
                campanhaBE.FechaRealInicio = tempFechaRealIni;
            }
        }
        if (this.txtFechaRealFin.Text != string.Empty)
        {
            CultureInfo cultura = System.Globalization.CultureInfo.CreateSpecificCulture("es-PE");
            DateTime tempFechaRealFin;
            if (DateTime.TryParse(this.txtFechaRealFin.Text, cultura, System.Globalization.DateTimeStyles.None, out tempFechaRealFin))
            {
                campanhaBE.FechaRealFin = tempFechaRealFin;
            }
        }

        if (this.txtResponsable.Text != string.Empty)
        {
            if (this.txtIdResponsable.Value != string.Empty)
            {
                int tempIdResponsable = 0;
                int.TryParse(this.txtIdResponsable.Value, out tempIdResponsable);
                if (tempIdResponsable > 0)
                {
                    campanhaBE.Trabajador = new BETrabajador();
                    campanhaBE.Trabajador.IdTrabajador = tempIdResponsable;
                }
            }
        }
        else
        {
            campanhaBE.Trabajador = null;
        }

        if (this.txtCreativo.Text != string.Empty)
        {
            if (this.txtIdCreativo.Value != string.Empty)
            {
                int tempIdCreativo = 0;
                int.TryParse(this.txtIdCreativo.Value, out tempIdCreativo);
                if (tempIdCreativo > 0)
                {
                    campanhaBE.Creativo = new BETrabajador();
                    campanhaBE.Creativo.IdTrabajador = tempIdCreativo;
                }
            }
        }
        else
        {
            campanhaBE.Creativo = null;
        }
        
        if (this.txtIdEstado.Value != string.Empty)
        {
            campanhaBE.EstadoCampanha = Constantes.ObtenerEnumEstadoCampanha(this.txtIdEstado.Value);
        }


        campanhaBE.Order_by = (char)Constantes.ORDENAR_POR.CODIGO;
        campanhaBE.De_forma = (char)Constantes.DE_FORMA.ASCENDENTE;

        return campanhaBE;
    }

    private void CargarTitulos(string tituloTxt)
    {
        this.lblTitulo.Text = tituloTxt;
    }


    //private void CargarActividades(int idCampanha)
    //{
    //    this.campanhaBL = new BLCampanha();
    //    DataTable dtActividades = this.campanhaBL.obtenerActividadesPorIdCampanha(idCampanha);

    //    this.gvActividades.DataSource = dtActividades;
    //    this.gvActividades.DataBind();
    //}

    public void CargarGrillaListadoActividad(bool deBuscar)
    {
        if (deBuscar == true)
        {
            this.gvActividades.PageIndex = 0;
        }

        int tempIdCampanha = Constantes.idValorNulo;
        int.TryParse(this.txtCodigo.Text, out tempIdCampanha);

        this.campanhaBL = new BLCampanha();
        DataTable dt = this.campanhaBL.obtenerActividadesPorIdCampanha(tempIdCampanha);
        this.gvActividades.DataSource = dt;
        this.gvActividades.DataBind();
    }

 
 
    private void ConfigurarVerDetalleActividad(GridViewRow fila)
    {
        Label lblTempCodigo = (Label)fila.FindControl("lblCodigo");
        Label lblTempNombre = (Label)fila.FindControl("lblNombre");
        ImageButton imgTempBtnVerDetalle = (ImageButton)fila.FindControl("btnVerDetalle");
        string cadenaURL = string.Empty;
        if (lblTempCodigo.Text != string.Empty)
        {
            cadenaURL += "../Gral/DetActividad.aspx?acc=" + Constantes.ACCION.VER.ToString("D") + "&idcmp=" + this.txtCodigo.Text + "&nocmp=" + this.txtNombre.Text.Replace("'", "''") + "&id=" + lblTempCodigo.Text.Replace("'", "''");
        }
        StringBuilder click = new StringBuilder();
        click.AppendLine(String.Format("return verDetActividad('{0}')", cadenaURL));
        imgTempBtnVerDetalle.Attributes.Add("onclick", click.ToString());
    }

     #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!Page.IsPostBack)
            {
                ControlHelper.RegisterClientScriptFile(this, "jquery.js", true);
                ControlHelper.RegisterClientScriptFile(this, "json2.js", true);

                ControlHelper.RegisterClientScriptFile(this, "jshashtable.js", true);
                ControlHelper.RegisterClientScriptFile(this, "numberformatter.js", true);
                
                ControlHelper.RegisterClientScriptFile(this, "thickbox.js", true);
                ControlHelper.RegisterClientScriptFile(this, "campanha.js", true);

                Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
                if (Request.QueryString["acc"] != null)
                {
                    accion = Constantes.ObtenerEnumAccion(Request.QueryString["acc"]);
                }
                switch (accion)
                {
                    case Constantes.ACCION.NINGUNO:
                        break;
                    case Constantes.ACCION.VER:
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaVer);
                        this.btnGuardar.Visible = false;
                        this.btnGuardar2.Visible = false;
                        if (Request.QueryString["id"] != null)
                        {
                            int idCampanha = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idCampanha);
                            this.ActivarControles(false);
                        }
                        break;
                    case Constantes.ACCION.NUEVO:
                        this.txtFechaCreacion.Text = DateTime.Now.ToString("dd/MM/yyyy");
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaNuevo);
                        this.ActivarControles(true);
                        break;
                    case Constantes.ACCION.MODIFICAR:
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaModificar);
                        if (Request.QueryString["id"] != null)
                        {
                            int idCampanha = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idCampanha);
                            this.ActivarControles(true);
                        }
                        break;
                    case Constantes.ACCION.ELIMINAR:
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaEliminar);
                        if (Request.QueryString["id"] != null)
                        {
                            int idCampanha = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idCampanha);
                            this.ActivarControles(false);
                        }
                        break;
                    case Constantes.ACCION.ASOCIAR:
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaPlanificar);
                        this.btnGuardar.Visible = false;
                        this.btnGuardar2.Visible = false;
                        if (Request.QueryString["id"] != null)
                        {
                            int idCampanha = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idCampanha);
                            this.CargarGrillaListadoActividad(true);
                            this.ActivarControles(false);
                        }
                        break;
                    case Constantes.ACCION.APROBAR:
                        this.CargarTitulos(Mensajes.txtTitulo_CampanhaAprobar);
                        if (Request.QueryString["id"] != null)
                        {
                            int idCampanha = int.Parse(Request.QueryString["id"].ToString());
                            this.CargarDatos(idCampanha);
                            this.CargarGrillaListadoActividad(true);
                            this.ActivarControles(false);
                        }
                        this.btnGuardar.Text = "Aprobar";
                        this.btnGuardar2.Text = "Aprobar";
                        break;
                    case Constantes.ACCION.GENERAR_REPORTE:
                        break;
                    default:
                        break;
                }

                this.txtFechaProyIni.Attributes.Add("OnBlur", String.Format("calcular_dias('{0}','{1}','{2}');", this.txtFechaProyIni.ClientID, this.txtFechaProyFin.ClientID, this.txtDias.ClientID));
                this.txtFechaProyFin.Attributes.Add("OnBlur", String.Format("calcular_dias('{0}','{1}','{2}');", this.txtFechaProyIni.ClientID, this.txtFechaProyFin.ClientID, this.txtDias.ClientID));
               

                this.txtMetaVenta.Attributes.Add("OnBlur", String.Format("formateaNumero('{0}');", this.txtMetaVenta.ClientID));
                this.txtPresupuesto.Attributes.Add("OnBlur", String.Format("formateaNumero('{0}');", this.txtPresupuesto.ClientID));
            }
        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_MostrarDetalle + "&descError=" + ex.Message, false);
        }
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("Campanha.aspx");
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
            if (Request.QueryString["acc"] != null)
            {
                accion = Constantes.ObtenerEnumAccion(Request.QueryString["acc"]);
            }
            //if (!ValidarDatosIngreso())
            //{
            //    return;
            //}

            this.campanhaBL = new BLCampanha();
            BECampanha campanhaBE = this.ObtenerCampanhaBE_WebForm();
            string msjeError = "";
            string msjeExitoOperacion = "";
            string msjeErrorOperacion = "";
            bool result = false;

            switch (accion)
            {
                case Constantes.ACCION.NINGUNO:
                    break;
                case Constantes.ACCION.VER:
                    break;
                case Constantes.ACCION.APROBAR:
                    msjeErrorOperacion = Mensajes.msjeError_AprobarRegistro;
                    msjeExitoOperacion = Mensajes.msjeExito_AprobarRegistro;
                    campanhaBE.EstadoCampanha = Constantes.ESTADO_CAMPANHA.APROBADO;
                    result = this.campanhaBL.actualizarEstadoCampanha(campanhaBE);
                    break;
                case Constantes.ACCION.GENERAR_REPORTE:
                    break;
                default:
                    break;
            }

            if (result == false)
            {
                Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_General + "&descError=" + msjeError, false);
            }
            else
            {
                ClientScript.RegisterStartupScript(this.GetType(), "Mensaje de Confirmación", "<script language='JavaScript'>alert('" + msjeExitoOperacion + "');window.location.href ='Campanha.aspx';</script>");
            }

        }
        catch (Exception ex)
        {
            Response.Redirect("~/Error.aspx?titError=" + Mensajes.msjeError_General + "&descError=" + ex.Message, false);
        }
    }

    protected void upActividades_Load(object sender, EventArgs e)
    {
        string arg = Request.Form["__EVENTARGUMENT"];
        if (string.IsNullOrEmpty(arg)) return;

        if (arg.StartsWith("Refresh"))
        {
            int tempIdCampanha = Constantes.idValorNulo;
            int.TryParse(Request.QueryString["id"].ToString(), out tempIdCampanha);
            this.campanhaBL = new BLCampanha();
            DataTable dtActividades = this.campanhaBL.obtenerActividadesPorIdCampanha(tempIdCampanha);
            int numPag = (dtActividades.Rows.Count / 10) + 1;

            //parse data first then do your thing here...
            this.gvActividades.PageIndex = numPag;
            this.gvActividades.DataSource = dtActividades;
            this.gvActividades.DataBind();
        }
    }

    protected void gvActividades_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.gvActividades.PageIndex = e.NewPageIndex;
        this.CargarGrillaListadoActividad(false);
    }
    protected void gvActividades_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Constantes.ACCION accion = Constantes.ACCION.NINGUNO;
        accion = Constantes.ObtenerEnumAccion(e.CommandName);

        if (accion == Constantes.ACCION.NINGUNO)
        {
            return;
        }

        GridViewRow fila = ((GridViewRow)((Control)e.CommandSource).NamingContainer);
        string idActividad = ((Label)fila.FindControl("lblCodigo")).Text;
        string idCampanha = Request.QueryString["id"].ToString();

        switch (accion)
        {
            case Constantes.ACCION.NINGUNO:
                break;
            case Constantes.ACCION.VER:
                break;
            case Constantes.ACCION.NUEVO:
                break;
            case Constantes.ACCION.MODIFICAR:
                break;
            case Constantes.ACCION.ASOCIAR:
                Response.Redirect("Requisitos.aspx?acc=" + Constantes.ACCION.ASOCIAR.ToString("D") + "&idac=" + idActividad + "&idcmp=" + idCampanha);
                break;
            case Constantes.ACCION.APROBAR:
                break;
            case Constantes.ACCION.GENERAR_REPORTE:
                break;
            case Constantes.ACCION.ANULAR:
                break;
            default:
                break;
        }
    }
    protected void gvActividades_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            GridViewRow fila = e.Row;
            this.ConfigurarVerDetalleActividad(fila);
        }
    }

    #endregion
    
}